package StringAlgorithm;

import java.util.ArrayList;
import java.util.List;

public class leet_3 {
    public static void main(String[] args) {
        Solution_3 p = new Solution_3();
        String s = "pwwkew";
        int maxNum = p.lengthOfLongestSubstring(s);
        System.out.println(maxNum);
    }

}



class Solution_3 {
    public int lengthOfLongestSubstring(String s) {
        if(s.length()==0){
            return 0;
        }
        int maxNum = findNoDep(s);
        return maxNum;
    }

    public int findNoDep(String s){
        // 指针
        int i = 0;
        // 最大无重复长度
        int max = 0;
        // 需要维护的队列
        List<String> stringList = new ArrayList();
        // 遍历数组
        for(; i<s.length(); i++){
            String tmp = String.valueOf(s.charAt(i));
            // 维护一个队列
            while( stringList.size()>0 && stringList.contains(tmp) ){
                // 如果队列长度大于1 且 队列中包含元素tmp
                // 将第一个元素清除保证你的队列可以添加这个元素
                stringList.remove(0);
            }
            // 元素进入队列内部
            stringList.add(tmp);
            // 最大长度问题
            if(max < stringList.size()){
                // 最大长度已经比一开始找到的要大就另max变为最大
                max = stringList.size();
            }
        }
        return max;
    }

}